#include <iostream>
#include <ostream>
struct ListNode {
    int val;
    ListNode *next;
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
    ListNode(int x, ListNode *next) : val(x), next(next) {}
 };

// 反转 head 链表，然后返回反转后的新的头节点
ListNode* reverseList(ListNode* head) {
    if (head == nullptr || head->next == nullptr) return head;
    ListNode* ret = reverseList(head->next);
    // 反转两个节点
    head->next->next = head;
    head->next = nullptr;
    return ret;
}